class Solution {
    public int nearestExit(char[][] maze, int[] entrance) {
        int[] dx={0,0,1,-1};
        int[] dy={1,-1,0,0};
        int m=maze.length;
        int n=maze[0].length;
        Queue<int[]> q=new LinkedList<>();
        q.add(new int[]{entrance[0],entrance[1]});
        int step=0;
        boolean[][] vis=new boolean[m][n]; 
        while(!q.isEmpty()){
            int l=q.size();
            step++;
            for(int i=0;i<l;i++){
                int[] t=q.poll();
                int a=t[0];
                int b=t[1];
                vis[a][b]=true;
                for(int j=0;j<4;j++){
                    int x=a+dx[j];
                    int y=b+dy[j];
                    if(x>=0&&x<m&&y>=0&&y<n&&maze[x][y]=='.'&&!vis[x][y]){
                        if(x==0||x==m-1||y==0||y==n-1) return step;
                        q.add(new int[]{x,y});
                        vis[x][y]=true;
                    }
                }
            }
        }
        return -1;
    }
}